<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 1、基本类型与引用类型内存
        var number = 10;

        var arr = [1, 2, 3];
        // 将number变量的值赋值给n
        // 变量赋值时永远是将变量在栈区存储的值赋值给另外一个变量
        var n = number;

        number = 20;

        console.log(n);
        // 将arr变量的值赋值给arr2(赋值的是内存地址)
        var arr2 = arr;

        arr[1] = 20;
        console.log(arr2);

        // 2、短路运算 借助于&& ||两个符号 进行短路
        // && 并且  要求两边都为真 最终结果为真，只要左边的表达式是假,就可以 决定整个表达式为假 所以后面的表达式不执行,如果左侧的为真就还不能确定整个表达式的结果 就会继续执行后面的语句.短路运算 可以简化if判断

        var flag = false;

        var n2 = 10;

        // flag && n2++;
        // console.log(n2);
        // if(flag){
        //     n2++;
        // }
        // || 如果左边的为真 后面的表达式就可以不用执行
        flag || n2++;
        console.log(n2);

        // 3、switch语句
        var day = 2;
        switch (day) {
            case 1:
                console.log('开需求会');
                break;
            case 2:
                console.log('摸鱼一天');
                break;
            case 3:
            case 4:
                console.log('功能开发');
                break;
            case 5:
                console.log('测试上线');
                break
            default:
                break;
        }
        // 4、三元运算
        var n3 = 10;
        var n4;
        // if(n3>5){
        //     n4 = n3;
        // }

        (n3 > 5) ? (n4 = n3) : '';
        n4 = (n3 > 5) ? n3 : '';

        // 5、while循环
        var i =0;
        while(true){
            if(i>10){
                break;
            }
            i++;
            console.log(i);
        }

        var arr = ['张三','私立'];
        for(var i =0;i<arr.length;i++){
            arr[i];
        }
        // 6、函数的本质
        function fn(){
            console.log('fn');
        }
        console.log(fn);
        var fn2 = function(){
            console.log('fn2');
        };


        // 函数创建 其实就是在当前作用域下创建了一个同名变量，并且将函数代码在堆区中的地址赋值给这个变量
        (function(){
            console.log('自调用匿名函数');
        })();
        // 好比  (0X444)()

        // 函数定义中的参数为形参
        function fn3(a,b){
            // 一旦函数调用 系统自动会进行赋值操作 就好像执行语句 var a = 2;var b = 4;
            return a+b;
        }
        // 调用函数时传递的就是实参
        fn3(2,4);

        function fn4(arr){
            // 隐藏画 var arr = arr2; 将arr2变量在栈区的地址赋值给了arr变量
            arr[1]=200;
        }
        var arr2 = [1,2,3];
        fn4(arr2);
        console.log(arr2);


        function  fn5(){
            console.log(name);//可以找到  是因为在window作用域下 确实存在name 变量 并且值为空字符串(永远是字符串 不能为其他类型)  
            console.log(age);//当前 以及window下都找不到
        }
        fn5();
    </script>
</body>

</html>